#include #include #include using namespace std; void displayGameBoard(int xMoves, int oMoves) { for(int i = 1; i <= 9; i++) { //type cast if( (xMoves & (int)pow(2.0,i)) == (int)pow(2.0,i)) { cout << "X"; } else if((oMoves & (int)pow(2.0,i)) == (int)pow(2.0,i)) { cout << "O"; } else { cout << i; } if(i == 3 || i == 6 ) { cout << endl << "-----" << endl; } else if( i == 9) { cout << endl << endl; } else { cout << "|"; } } } int getMove(int xMoves, int oMoves) { int result = 0; do { cin >> result; } while(result < 1 || result > 9 || (xMoves & (int)pow(2.0,result)) == (int)pow(2.0,result) || (oMoves & (int)pow(2.0,result)) == (int)pow(2.0,result) ); return result; } bool didPlayerWin(int moves) { bool result = false; if((moves & 14) == 14 || (moves & 112) == 112 || (moves & 896) == 896 || (moves & 546) == 546 || (moves & 584) == 584 || (moves & 292) == 292 || (moves & 146) == 146 || (moves & 168) == 168) { result = true; } return result; } void main() { const int BOARD_FULL = 1022; int xMoves = 0; int oMoves = 0; bool continuePlay = true; bool xTurn = true; while(continuePlay) { displayGameBoard(xMoves, oMoves); cout << ((xTurn)? "X Move ?": "O Move ?"); int move = getMove(xMoves, oMoves); if(xTurn) { xMoves += (int) pow(2.0,move); } else { oMoves += (int) pow(2.0,move); } //get move from user xTurn = !xTurn; //need to change gameOver if(didPlayerWin(xMoves)) { cout << "X wins" << endl; continuePlay = false; } else if(didPlayerWin(oMoves)) { cout << "O wins" << endl; continuePlay = false; } else if(xMoves + oMoves == BOARD_FULL) { cout << "CAT wins" << endl; continuePlay = false; } } }